package com.monster.common;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 上下文管理
 *
 * @author kuang
 */
public class Context {
    /**
     * 存储系统的一些线程变量
     */
    private static final InheritableThreadLocal<Map<String, Object>> threadLocal = new InheritableThreadLocal();

    /**
     * 初始化上下文变量
     */
    public static void init () {
        clean();
        threadLocal.set(new ConcurrentHashMap<>(5));
    }

    /**
     * 往上下文里面存放一个值
     *
     * @param key 唯一标识key
     * @param obj 数据
     */
    public static void set(String key, Object obj) {
        threadLocal.get().put(key, obj);
    }

    /**
     * 通过key获取一个上下文的值
     *
     * @param key 唯一标识key
     * @param <T> 返回的数据类型
     * @return 返回的数据
     */
    public static <T> T get(String key) {
        return (T) threadLocal.get().get(key);
    }


    /**
     * 清除所有的上下文
     */
    public static void clean() {
        threadLocal.remove();
    }
}
